home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / workbench / term_4.8 / extras / source / term-source.lha / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1997-03-11  |  19KB  |  856 lines

  1. /*
  2. **    EmulationPanel.c
  3. **
  4. **    Editing panel for emulation configuration
  5. **
  6. **    Copyright © 1990-1997 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_USE=1000, GAD_CANCEL,
  17.             GAD_SCROLL, GAD_JUMP_SCROLL,
  18.             GAD_EDITPENS, GAD_STDPENS,
  19.             GAD_PAGER, GAD_PAGEGROUP, GAD_BBS_ANSI_COMPLIANT,
  20.             GAD_TERMINALTYPE, GAD_CLS_RESETS_CURSOR, GAD_WRAP_CURSOR_MOVES,
  21.             GAD_WRAP_CHARACTERS, GAD_DESTRUCTIVE_BS,
  22.         };
  23.  
  24. STATIC VOID
  25. EmulationPenPanel(struct Window *Parent,struct Configuration *Config,LONG Depth)
  26. {
  27.     LayoutHandle *Handle;
  28.     UBYTE Attribute[4];
  29.     UBYTE Colours[16];
  30.     UWORD Pen[16];
  31.     LONG i;
  32.  
  33.     for(i = 0 ; i < (1L << Depth) ; i++)
  34.         Colours[i] = MappedPens[0][i];
  35.  
  36.     CopyMem(Config->EmulationConfig->Pens,Pen,sizeof(Pen));
  37.     CopyMem(Config->EmulationConfig->Attributes,Attribute,sizeof(Attribute));
  38.  
  39.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  40.         LAHN_LocaleHook,    &LocaleHook,
  41.         LAHN_ExactClone,    TRUE,
  42.         LAHN_ExitFlush,        FALSE,
  43.     TAG_DONE))
  44.     {
  45.         struct Window *PanelWindow;
  46.  
  47.         LT_New(Handle,
  48.             LA_Type,    VERTICAL_KIND,
  49.         TAG_DONE);
  50.         {
  51.             LT_New(Handle,
  52.                 LA_Type,    HORIZONTAL_KIND,
  53.             TAG_DONE);
  54.             {
  55.                 LT_New(Handle,
  56.                     LA_Type,    VERTICAL_KIND,
  57.                     LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  58.                 TAG_DONE);
  59.                 {
  60.                     LT_New(Handle,
  61.                         LA_Type,            PALETTE_KIND,
  62.                         LA_LabelText,        "_0",
  63.                         GTPA_Depth,            Depth,
  64.                         GTPA_ColorTable,    Colours,
  65.                         LAPA_SmallPalette,    TRUE,
  66.                         LA_UWORD,            &Pen[0],
  67.                     TAG_DONE);
  68.  
  69.                     LT_New(Handle,
  70.                         LA_Type,            PALETTE_KIND,
  71.                         LA_LabelText,        "_1",
  72.                         GTPA_Depth,            Depth,
  73.                         GTPA_ColorTable,    Colours,
  74.                         LAPA_SmallPalette,    TRUE,
  75.                         LA_UWORD,            &Pen[1],
  76.                     TAG_DONE);
  77.  
  78.                     if(Depth > 1)
  79.                     {
  80.                         LT_New(Handle,
  81.                             LA_Type,            PALETTE_KIND,
  82.                             LA_LabelText,        "_2",
  83.                             GTPA_Depth,            Depth,
  84.                             GTPA_ColorTable,    Colours,
  85.                             LAPA_SmallPalette,    TRUE,
  86.                             LA_UWORD,            &Pen[2],
  87.                         TAG_DONE);
  88.  
  89.                         LT_New(Handle,
  90.                             LA_Type,            PALETTE_KIND,
  91.                             LA_LabelText,        "_3",
  92.                             GTPA_Depth,            Depth,
  93.                             GTPA_ColorTable,    Colours,
  94.                             LAPA_SmallPalette,    TRUE,
  95.                             LA_UWORD,            &Pen[3],
  96.                         TAG_DONE);
  97.                     }
  98.  
  99.                     if(Depth > 2)
  100.                     {
  101.                         LT_New(Handle,
  102.                             LA_Type,            PALETTE_KIND,
  103.                             LA_LabelText,        "_4",
  104.                             GTPA_Depth,            Depth,
  105.                             GTPA_ColorTable,    Colours,
  106.                             LAPA_SmallPalette,    TRUE,
  107.                             LA_UWORD,            &Pen[4],
  108.                         TAG_DONE);
  109.  
  110.                         LT_New(Handle,
  111.                             LA_Type,            PALETTE_KIND,
  112.                             LA_LabelText,        "_5",
  113.                             GTPA_Depth,            Depth,
  114.                             GTPA_ColorTable,    Colours,
  115.                             LAPA_SmallPalette,    TRUE,
  116.                             LA_UWORD,            &Pen[5],
  117.                         TAG_DONE);
  118.  
  119.                         LT_New(Handle,
  120.                             LA_Type,            PALETTE_KIND,
  121.                             LA_LabelText,        "_6",
  122.                             GTPA_Depth,            Depth,
  123.                             GTPA_ColorTable,    Colours,
  124.                             LAPA_SmallPalette,    TRUE,
  125.                             LA_UWORD,            &Pen[6],
  126.                         TAG_DONE);
  127.  
  128.                         LT_New(Handle,
  129.                             LA_Type,            PALETTE_KIND,
  130.                             LA_LabelText,        "_7",
  131.                             GTPA_Depth,            Depth,
  132.                             GTPA_ColorTable,    Colours,
  133.                             LAPA_SmallPalette,    TRUE,
  134.                             LA_UWORD,            &Pen[7],
  135.                         TAG_DONE);
  136.                     }
  137.  
  138.                     LT_EndGroup(Handle);
  139.                 }
  140.  
  141.                 LT_New(Handle,
  142.                     LA_Type,    VERTICAL_KIND,
  143.                     LA_LabelID,    MSG_ATTRIBUTES_TXT,
  144.                 TAG_DONE);
  145.                 {
  146.                     LT_New(Handle,
  147.                         LA_Type,        CYCLE_KIND,
  148.                         LA_LabelID,        MSG_ATTRIBUTE1_GAD,
  149.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  150.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  151.                         LA_UBYTE,        &Attribute[TEXTATTR_UNDERLINE],
  152.                     TAG_DONE);
  153.  
  154.                     LT_New(Handle,
  155.                         LA_Type,        CYCLE_KIND,
  156.                         LA_LabelID,        MSG_ATTRIBUTE2_GAD,
  157.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  158.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  159.                         LA_UBYTE,        &Attribute[TEXTATTR_HIGHLIGHT],
  160.                     TAG_DONE);
  161.  
  162.                     LT_New(Handle,
  163.                         LA_Type,        CYCLE_KIND,
  164.                         LA_LabelID,        MSG_ATTRIBUTE3_GAD,
  165.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  166.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  167.                         LA_UBYTE,        &Attribute[TEXTATTR_BLINK],
  168.                     TAG_DONE);
  169.  
  170.                     LT_New(Handle,
  171.                         LA_Type,        CYCLE_KIND,
  172.                         LA_LabelID,        MSG_ATTRIBUTE4_GAD,
  173.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  174.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  175.                         LA_UBYTE,        &Attribute[TEXTATTR_INVERSE],
  176.                     TAG_DONE);
  177.  
  178.                     LT_EndGroup(Handle);
  179.                 }
  180.  
  181.                 LT_EndGroup(Handle);
  182.             }
  183.  
  184.             LT_New(Handle,
  185.                 LA_Type,VERTICAL_KIND,
  186.             TAG_DONE);
  187.             {
  188.                 LT_New(Handle,
  189.                     LA_Type,        XBAR_KIND,
  190.                     LAXB_FullSize,    TRUE,
  191.                 TAG_DONE);
  192.  
  193.                 LT_EndGroup(Handle);
  194.             }
  195.  
  196.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  197.                 LAGR_SameSize,    TRUE,
  198.                 LAGR_Spread,    TRUE,
  199.             TAG_DONE);
  200.             {
  201.                 LT_New(Handle,
  202.                     LA_Type,        BUTTON_KIND,
  203.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  204.                     LA_ID,            GAD_USE,
  205.                     LABT_ReturnKey,    TRUE,
  206.                     LABT_ExtraFat,    TRUE,
  207.                 TAG_DONE);
  208.  
  209.                 LT_New(Handle,
  210.                     LA_Type,        BUTTON_KIND,
  211.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  212.                     LA_ID,            GAD_CANCEL,
  213.                     LABT_EscKey,    TRUE,
  214.                     LABT_ExtraFat,    TRUE,
  215.                 TAG_DONE);
  216.  
  217.                 LT_EndGroup(Handle);
  218.             }
  219.  
  220.             LT_EndGroup(Handle);
  221.         }
  222.  
  223.         if(PanelWindow = LT_Build(Handle,
  224.             LAWN_TitleID,        MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
  225.             LAWN_HelpHook,        &GuideHook,
  226.             LAWN_Parent,        Parent,
  227.             WA_DepthGadget,        TRUE,
  228.             WA_DragBar,            TRUE,
  229.             WA_RMBTrap,            TRUE,
  230.             WA_Activate,        TRUE,
  231.             WA_SimpleRefresh,    TRUE,
  232.         TAG_DONE))
  233.         {
  234.             struct IntuiMessage    *Message;
  235.             struct Gadget *MsgGadget;
  236.             ULONG MsgClass;
  237.             BOOL Done;
  238.  
  239.             PushWindow(PanelWindow);
  240.  
  241.             LT_ShowWindow(Handle,TRUE);
  242.  
  243.             GuideContext(CONTEXT_TEXTPEN_PANEL);
  244.  
  245.             Done = FALSE;
  246.  
  247.             do
  248.             {
  249.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  250.                     break;
  251.  
  252.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  253.                 {
  254.                     MsgClass    = Message->Class;
  255.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  256.  
  257.                     LT_ReplyIMsg(Message);
  258.  
  259.                     if(MsgClass == IDCMP_GADGETUP)
  260.                     {
  261.                         switch(MsgGadget->GadgetID)
  262.                         {
  263.                             case GAD_USE:
  264.  
  265.                                 CopyMem(Pen,Config->EmulationConfig->Pens,sizeof(Pen));
  266.                                 CopyMem(Attribute,Config->EmulationConfig->Attributes,sizeof(Attribute));
  267.  
  268.                                 /* Falls through to... */
  269.  
  270.                             case GAD_CANCEL:
  271.  
  272.                                 break;
  273.                         }
  274.                     }
  275.                 }
  276.             }
  277.             while(!Done);
  278.  
  279.             PopWindow();
  280.         }
  281.  
  282.         LT_DeleteHandle(Handle);
  283.     }
  284. }
  285.  
  286. BOOL
  287. EmulationPanel(struct Window *Parent,struct Configuration *LocalConfig)
  288. {
  289.     STATIC LONG PageTitleID[5] =
  290.     {
  291.         MSG_V36_0035,
  292.         MSG_V36_0034,
  293.         MSG_V36_0036,
  294.         MSG_PENPANEL_DRAWING_PENS_TXT,
  295.         -1
  296.     };
  297.  
  298.     STATIC BYTE InitialPage = 0;
  299.  
  300.     LONG Depth,CurrentDepth;
  301.     LayoutHandle *Handle;
  302.     STRPTR PageTitle[5];
  303.     BOOL PenChoices;
  304.     BOOL UseIt;
  305.  
  306.     UseIt = FALSE;
  307.  
  308.     LocalizeStringTable(PageTitle,PageTitleID);
  309.  
  310.     SaveConfig(LocalConfig,PrivateConfig);
  311.  
  312.     if(PrivateConfig->ScreenConfig->UseWorkbench || PrivateConfig->ScreenConfig->ShareScreen)
  313.         PenChoices = FALSE;
  314.     else
  315.         PenChoices = TRUE;
  316.  
  317.     switch(PrivateConfig->ScreenConfig->ColourMode)
  318.     {
  319.         case COLOUR_MONO:
  320.  
  321.             Depth = 1;
  322.             break;
  323.  
  324.         case COLOUR_AMIGA:
  325.  
  326.             Depth = 2;
  327.             break;
  328.  
  329.         case COLOUR_EIGHT:
  330.  
  331.             Depth = 3;
  332.             break;
  333.  
  334.         case COLOUR_SIXTEEN:
  335.  
  336.             Depth = 4;
  337.             break;
  338.     }
  339.  
  340.     switch(Config->ScreenConfig->ColourMode)
  341.     {
  342.         case COLOUR_MONO:
  343.  
  344.             CurrentDepth = 1;
  345.             break;
  346.  
  347.         case COLOUR_AMIGA:
  348.  
  349.             CurrentDepth = 2;
  350.             break;
  351.  
  352.         case COLOUR_EIGHT:
  353.  
  354.             CurrentDepth = 3;
  355.             break;
  356.  
  357.         case COLOUR_SIXTEEN:
  358.  
  359.             CurrentDepth = 4;
  360.             break;
  361.     }
  362.  
  363.     if(Depth != CurrentDepth || !PenChoices)
  364.     {
  365.         PageTitle[3] = NULL;
  366.  
  367.         if(InitialPage == 4)
  368.             InitialPage = 3;
  369.     }
  370.     else
  371.         PageTitle[4] = NULL;
  372.  
  373.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  374.         LAHN_LocaleHook,    &LocaleHook,
  375.         LAHN_ExactClone,    TRUE,
  376.     TAG_DONE))
  377.     {
  378.         struct Window *PanelWindow;
  379.  
  380.         LT_New(Handle,
  381.             LA_Type,    VERTICAL_KIND,
  382.         TAG_DONE);
  383.         {
  384.             LT_New(Handle,
  385.                 LA_Type,VERTICAL_KIND,
  386.             TAG_DONE);
  387.             {
  388.                 LT_New(Handle,
  389.                     LA_Type,        TAB_KIND,
  390.                     LA_ID,            GAD_PAGER,
  391.                     LA_LabelID,        MSG_XFER_PAGE_TXT,
  392.                     GTCY_Labels,    PageTitle,
  393.                     LACY_AutoPageID,GAD_PAGEGROUP,
  394.                     LACY_TabKey,    TRUE,
  395.                     LA_BYTE,        &InitialPage,
  396.                     LATB_FullWidth,    TRUE,
  397.                 TAG_DONE);
  398.  
  399.                 LT_EndGroup(Handle);
  400.             }
  401.  
  402.             LT_New(Handle,
  403.                 LA_Type,        VERTICAL_KIND,
  404.                 LA_ID,            GAD_PAGEGROUP,
  405.                 LAGR_ActivePage,InitialPage,
  406.             TAG_DONE);
  407.             {
  408.                 LT_New(Handle,
  409.                     LA_Type,    VERTICAL_KIND,
  410.                 TAG_DONE);
  411.                 {
  412.                     LT_New(Handle,
  413.                         LA_Type,    VERTICAL_KIND,
  414.                     TAG_DONE);
  415.                     {
  416.                         LT_New(Handle,
  417.                             LA_Type,        CHECKBOX_KIND,
  418.                             LA_LabelID,        MSG_BBS_ANSI_COMPLIANT_TXT,
  419.                             LA_ID,            GAD_BBS_ANSI_COMPLIANT,
  420.                             GTCB_Checked,    PrivateConfig->EmulationConfig->CLSResetsCursor && PrivateConfig->EmulationConfig->CursorWrap && PrivateConfig->EmulationConfig->LineWrap && PrivateConfig->EmulationConfig->TerminalType == TERMINAL_VT102 && !PrivateConfig->EmulationConfig->DestructiveBackspace,
  421.                         TAG_DONE);
  422.  
  423.                         LT_New(Handle,
  424.                             LA_Type,        XBAR_KIND,
  425.                         TAG_DONE);
  426.  
  427.                         LT_EndGroup(Handle);
  428.                     }
  429.  
  430.                     LT_New(Handle,
  431.                         LA_Type,    HORIZONTAL_KIND,
  432.                     TAG_DONE);
  433.                     {
  434.                         LT_New(Handle,
  435.                             LA_Type,    VERTICAL_KIND,
  436.                         TAG_DONE);
  437.                         {
  438.                             LT_New(Handle,
  439.                                 LA_Type,    CHECKBOX_KIND,
  440.                                 LA_LabelID,    MSG_EMULATIONPANEL_WRAP_CHARACTERS_GAD,
  441.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->LineWrap,
  442.                                 LA_ID,        GAD_WRAP_CHARACTERS,
  443.                             TAG_DONE);
  444.  
  445.                             LT_New(Handle,
  446.                                 LA_Type,    CHECKBOX_KIND,
  447.                                 LA_LabelID,    MSG_LOCK_WRAPPING_GAD,
  448.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->LockWrapping,
  449.                             TAG_DONE);
  450.  
  451.                             LT_New(Handle,
  452.                                 LA_Type,    CHECKBOX_KIND,
  453.                                 LA_LabelID,    MSG_EMULATIONPANEL_INSERT_MODE_GAD,
  454.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->InsertMode,
  455.                             TAG_DONE);
  456.  
  457.                             LT_New(Handle,
  458.                                 LA_Type,    CHECKBOX_KIND,
  459.                                 LA_LabelID,    MSG_EMULATIONPANEL_NEW_LINE_MODE_GAD,
  460.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->NewLineMode,
  461.                             TAG_DONE);
  462.  
  463.                             LT_EndGroup(Handle);
  464.                         }
  465.  
  466.                         LT_New(Handle,
  467.                             LA_Type,    VERTICAL_KIND,
  468.                         TAG_DONE);
  469.                         {
  470.                             LT_New(Handle,
  471.                                 LA_Type,    CHECKBOX_KIND,
  472.                                 LA_LabelID,    MSG_EMULATIONPANEL_CLS_RESETS_CURSOR_GAD,
  473.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->CLSResetsCursor,
  474.                                 LA_ID,        GAD_CLS_RESETS_CURSOR,
  475.                             TAG_DONE);
  476.  
  477.                             LT_New(Handle,
  478.                                 LA_Type,    CHECKBOX_KIND,
  479.                                 LA_LabelID,    MSG_EMULATIONPANEL_PRINTER_CONTROL_GAD,
  480.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->PrinterEnabled,
  481.                             TAG_DONE);
  482.  
  483.                             LT_New(Handle,
  484.                                 LA_Type,    CHECKBOX_KIND,
  485.                                 LA_LabelID,    MSG_LOCK_STYLE_GAD,
  486.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->LockStyle,
  487.                             TAG_DONE);
  488.  
  489.                             LT_New(Handle,
  490.                                 LA_Type,    CHECKBOX_KIND,
  491.                                 LA_LabelID,    MSG_LOCK_COLOUR_GAD,
  492.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->LockColour,
  493.                             TAG_DONE);
  494.  
  495.                             LT_EndGroup(Handle);
  496.                         }
  497.  
  498.                         LT_EndGroup(Handle);
  499.                     }
  500.  
  501.                     LT_New(Handle,
  502.                         LA_Type,    VERTICAL_KIND,
  503.                     TAG_DONE);
  504.                     {
  505.                         LT_New(Handle,
  506.                             LA_Type,    CHECKBOX_KIND,
  507.                             LA_LabelID,    MSG_EMULATIONPANEL_WRAP_CURSOR_MOVES_GAD,
  508.                             LA_BYTE,    &PrivateConfig->EmulationConfig->CursorWrap,
  509.                             LA_ID,        GAD_WRAP_CURSOR_MOVES,
  510.                         TAG_DONE);
  511.  
  512.                         LT_EndGroup(Handle);
  513.                     }
  514.  
  515.                     LT_New(Handle,
  516.                         LA_Type,    VERTICAL_KIND,
  517.                     TAG_DONE);
  518.                     {
  519.                         LT_New(Handle,
  520.                             LA_Type,    XBAR_KIND,
  521.                         TAG_DONE);
  522.  
  523.                         LT_New(Handle,
  524.                             LA_Type,        CYCLE_KIND,
  525.                             LA_LabelID,        MSG_TERMINALTYPE_TXT,
  526.                             LA_BYTE,        &PrivateConfig->EmulationConfig->TerminalType,
  527.                             LACY_FirstLabel,MSG_TERMINALTYPE_VT200_TXT,
  528.                             LACY_LastLabel,    MSG_TERMINALTYPE_VT100_TXT,
  529.                             LA_ID,            GAD_TERMINALTYPE,
  530.                         TAG_DONE);
  531.  
  532.                         LT_EndGroup(Handle);
  533.                     }
  534.  
  535.                     LT_EndGroup(Handle);
  536.                 }
  537.  
  538.                 LT_New(Handle,
  539.                     LA_Type,    VERTICAL_KIND,
  540.                 TAG_DONE);
  541.                 {
  542.                     LT_New(Handle,
  543.                         LA_Type,        CYCLE_KIND,
  544.                         LA_LabelID,        MSG_EMULATIONPANEL_CURSOR_KEYS_GAD,
  545.                         LA_BYTE,        &PrivateConfig->EmulationConfig->CursorMode,
  546.                         LACY_FirstLabel,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,
  547.                         LACY_LastLabel,    MSG_EMULATIONPANEL_APPLICATION_MODE_TXT,
  548.                         LA_Chars,        20,
  549.                     TAG_DONE);
  550.  
  551.                     LT_New(Handle,
  552.                         LA_Type,        CHECKBOX_KIND,
  553.                         LA_LabelID,        MSG_LOCK_CURSOR_KEY_MODE_TXT,
  554.                         LA_BYTE,        &PrivateConfig->EmulationConfig->CursorLocked,
  555.                     TAG_DONE);
  556.  
  557.                     LT_New(Handle,
  558.                         LA_Type,        XBAR_KIND,
  559.                     TAG_DONE);
  560.  
  561.                     LT_New(Handle,
  562.                         LA_Type,        CYCLE_KIND,
  563.                         LA_LabelID,        MSG_EMULATIONPANEL_NUMERIC_KEYPAD_GAD,
  564.                         LA_BYTE,        &PrivateConfig->EmulationConfig->NumericMode,
  565.                         LACY_FirstLabel,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,
  566.                         LACY_LastLabel,    MSG_EMULATIONPANEL_APPLICATION_MODE_TXT,
  567.                     TAG_DONE);
  568.  
  569.                     LT_New(Handle,
  570.                         LA_Type,        CHECKBOX_KIND,
  571.                         LA_LabelID,        MSG_V36_1820,
  572.                         LA_BYTE,        &PrivateConfig->EmulationConfig->KeysLocked,
  573.                     TAG_DONE);
  574.  
  575.                     LT_New(Handle,
  576.                         LA_Type,        XBAR_KIND,
  577.                     TAG_DONE);
  578.  
  579.                     LT_New(Handle,
  580.                         LA_Type,        CHECKBOX_KIND,
  581.                         LA_LabelID,        MSG_EMULATIONPANEL_SWAP_BS_AND_DEL_GAD,
  582.                         LA_BYTE,        &PrivateConfig->EmulationConfig->SwapBSDelete,
  583.                     TAG_DONE);
  584.  
  585.                     LT_EndGroup(Handle);
  586.                 }
  587.  
  588.                 LT_New(Handle,
  589.                     LA_Type,    VERTICAL_KIND,
  590.                 TAG_DONE);
  591.                 {
  592.                     LT_New(Handle,
  593.                         LA_Type,                CHECKBOX_KIND,
  594.                         LA_LabelID,                MSG_LOCK_FONT_MODE_TXT,
  595.                         LA_BYTE,                &PrivateConfig->EmulationConfig->FontLocked,
  596.                     TAG_DONE);
  597.  
  598.                     LT_New(Handle,
  599.                         LA_Type,                CYCLE_KIND,
  600.                         LA_LabelID,                MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD,
  601.                         LA_BYTE,                &PrivateConfig->EmulationConfig->ScrollMode,
  602.                         LACY_FirstLabel,        MSG_EMULATIONPANEL_JUMP_TXT,
  603.                         LACY_LastLabel,            MSG_EMULATIONPANEL_SMOOTH_TXT,
  604.                     TAG_DONE);
  605.  
  606.                     LT_New(Handle,
  607.                         LA_Type,                CYCLE_KIND,
  608.                         LA_ID,                    GAD_DESTRUCTIVE_BS,
  609.                         LA_LabelID,                MSG_EMULATIONPANEL_DESTRUCTIVE_BACKSPACE_GAD,
  610.                         LA_BYTE,                &PrivateConfig->EmulationConfig->DestructiveBackspace,
  611.                         LACY_FirstLabel,        MSG_DESTRUCTIVE_BS_OFF_TXT,
  612.                         LACY_LastLabel,            MSG_DESTRUCTIVE_BS_SHIFT_TXT,
  613.                     TAG_DONE);
  614.  
  615.                     LT_New(Handle,
  616.                         LA_Type,                STRING_KIND,
  617.                         LA_LabelID,                MSG_EMULATIONPANEL_ANSWERBACK_MESSAGE_GAD,
  618.                         LA_STRPTR,                PrivateConfig->EmulationConfig->AnswerBack,
  619.                         GTST_MaxChars,            sizeof(PrivateConfig->EmulationConfig->AnswerBack) - 1,
  620.                     TAG_DONE);
  621.  
  622.                     LT_New(Handle,
  623.                         LA_Type,                INTEGER_KIND,
  624.                         LA_LabelID,                MSG_EMULATIONPANEL_PRESCROLL_TXT,
  625.                         LA_UBYTE,                &PrivateConfig->EmulationConfig->MaxScroll,
  626.                         LAIN_Min,                0,
  627.                         LAIN_Max,                255,
  628.                         LA_ID,                    GAD_SCROLL,
  629.                         LAIN_UseIncrementers,    TRUE,
  630.                         GTIN_MaxChars,            3,
  631.                     TAG_DONE);
  632.  
  633.                     LT_New(Handle,
  634.                         LA_Type,                INTEGER_KIND,
  635.                         LA_LabelID,                MSG_EMULATIONPANEL_JUMP_SCROLL_TXT,
  636.                         LA_UBYTE,                &PrivateConfig->EmulationConfig->MaxJump,
  637.                         LAIN_Min,                0,
  638.                         LAIN_Max,                255,
  639.                         LA_ID,                    GAD_JUMP_SCROLL,
  640.                         LAIN_UseIncrementers,    TRUE,
  641.                         GTIN_MaxChars,            3,
  642.                     TAG_DONE);
  643.  
  644.                     LT_EndGroup(Handle);
  645.                 }
  646.  
  647.                 if(PageTitle[3])
  648.                 {
  649.                     LT_New(Handle,
  650.                         LA_Type,    VERTICAL_KIND,
  651.                     TAG_DONE);
  652.                     {
  653.                         LT_New(Handle,
  654.                             LA_Type,    VERTICAL_KIND,
  655.                         TAG_DONE);
  656.                         {
  657.                             LT_New(Handle,
  658.                                 LA_Type,    CHECKBOX_KIND,
  659.                                 LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  660.                                 LA_ID,        GAD_STDPENS,
  661.                                 LA_BYTE,    &PrivateConfig->EmulationConfig->UseStandardPens,
  662.                             TAG_DONE);
  663.  
  664.                             LT_EndGroup(Handle);
  665.                         }
  666.  
  667.                         LT_New(Handle,
  668.                             LA_Type,    VERTICAL_KIND,
  669.                         TAG_DONE);
  670.                         {
  671.                             LT_New(Handle,
  672.                                 LA_Type,        BUTTON_KIND,
  673.                                 LA_LabelID,        MSG_PENPANEL_EDITPENS_TXT,
  674.                                 LA_ID,            GAD_EDITPENS,
  675.                                 GA_Disabled,    PrivateConfig->EmulationConfig->UseStandardPens,
  676.                             TAG_DONE);
  677.  
  678.                             LT_EndGroup(Handle);
  679.                         }
  680.  
  681.                         LT_EndGroup(Handle);
  682.                     }
  683.                 }
  684.  
  685.                 LT_EndGroup(Handle);
  686.             }
  687.  
  688.             LT_New(Handle,
  689.                 LA_Type,VERTICAL_KIND,
  690.             TAG_DONE);
  691.             {
  692.                 LT_New(Handle,
  693.                     LA_Type,        XBAR_KIND,
  694.                     LAXB_FullSize,    TRUE,
  695.                 TAG_DONE);
  696.  
  697.                 LT_EndGroup(Handle);
  698.             }
  699.  
  700.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  701.                 LAGR_SameSize,    TRUE,
  702.                 LAGR_Spread,    TRUE,
  703.             TAG_DONE);
  704.             {
  705.                 LT_New(Handle,
  706.                     LA_Type,        BUTTON_KIND,
  707.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  708.                     LA_ID,            GAD_USE,
  709.                     LABT_ReturnKey,    TRUE,
  710.                     LABT_ExtraFat,    TRUE,
  711.                 TAG_DONE);
  712.  
  713.                 LT_New(Handle,
  714.                     LA_Type,        BUTTON_KIND,
  715.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  716.                     LA_ID,            GAD_CANCEL,
  717.                     LABT_EscKey,    TRUE,
  718.                     LABT_ExtraFat,    TRUE,
  719.                 TAG_DONE);
  720.  
  721.                 LT_EndGroup(Handle);
  722.             }
  723.  
  724.             LT_EndGroup(Handle);
  725.         }
  726.  
  727.         if(PanelWindow = LT_Build(Handle,
  728.             LAWN_TitleID,        MSG_EMULATIONPANEL_EMULATION_PREFERENCES_TXT,
  729.             LAWN_HelpHook,        &GuideHook,
  730.             LAWN_Parent,        Parent,
  731.             WA_DepthGadget,        TRUE,
  732.             WA_DragBar,            TRUE,
  733.             WA_RMBTrap,            TRUE,
  734.             WA_Activate,        TRUE,
  735.             WA_SimpleRefresh,    TRUE,
  736.         TAG_DONE))
  737.         {
  738.             struct IntuiMessage    *Message;
  739.             struct Gadget *MsgGadget;
  740.             ULONG MsgClass;
  741.             UWORD MsgCode;
  742.             BOOL Done;
  743.  
  744.             GuideContext(CONTEXT_EMULATION);
  745.  
  746.             PushWindow(PanelWindow);
  747.  
  748.             LT_ShowWindow(Handle,TRUE);
  749.  
  750.             Done = FALSE;
  751.  
  752.             do
  753.             {
  754.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  755.                     break;
  756.  
  757.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  758.                 {
  759.                     MsgClass    = Message->Class;
  760.                     MsgCode        = Message->Code;
  761.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  762.  
  763.                     LT_ReplyIMsg(Message);
  764.  
  765.                     if(MsgClass == IDCMP_GADGETUP)
  766.                     {
  767.                         switch(MsgGadget->GadgetID)
  768.                         {
  769.                             case GAD_STDPENS:
  770.  
  771.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  772.                                     GA_Disabled,    MsgCode,
  773.                                 TAG_DONE);
  774.  
  775.                                 break;
  776.  
  777.                             case GAD_EDITPENS:
  778.  
  779.                                 LT_LockWindow(PanelWindow);
  780.  
  781.                                 EmulationPenPanel(PanelWindow,PrivateConfig,Depth);
  782.  
  783.                                 LT_UnlockWindow(PanelWindow);
  784.  
  785.                                 break;
  786.  
  787.                             case GAD_USE:
  788.  
  789.                                 LT_UpdateStrings(Handle);
  790.  
  791.                                 UseIt = Done = TRUE;
  792.  
  793.                                 break;
  794.  
  795.                             case GAD_CANCEL:
  796.  
  797.                                 Done = TRUE;
  798.                                 break;
  799.  
  800.                             case GAD_BBS_ANSI_COMPLIANT:
  801.  
  802.                                 if(MsgCode)
  803.                                 {
  804.                                     LT_SetAttributes(Handle,GAD_TERMINALTYPE,
  805.                                         GTCY_Active,    TERMINAL_VT102,
  806.                                     TAG_DONE);
  807.  
  808.                                     LT_SetAttributes(Handle,GAD_CLS_RESETS_CURSOR,
  809.                                         GTCB_Checked,    TRUE,
  810.                                     TAG_DONE);
  811.  
  812.                                     LT_SetAttributes(Handle,GAD_WRAP_CURSOR_MOVES,
  813.                                         GTCB_Checked,    TRUE,
  814.                                     TAG_DONE);
  815.  
  816.                                     LT_SetAttributes(Handle,GAD_WRAP_CHARACTERS,
  817.                                         GTCB_Checked,    TRUE,
  818.                                     TAG_DONE);
  819.  
  820.                                     LT_SetAttributes(Handle,GAD_DESTRUCTIVE_BS,
  821.                                         GTCY_Active,    0,
  822.                                     TAG_DONE);
  823.                                 }
  824.  
  825.                                 break;
  826.  
  827.                             default:
  828.  
  829.                                 LT_SetAttributes(Handle,GAD_BBS_ANSI_COMPLIANT,
  830.                                     GTCB_Checked,    PrivateConfig->EmulationConfig->CLSResetsCursor && PrivateConfig->EmulationConfig->CursorWrap && PrivateConfig->EmulationConfig->LineWrap && PrivateConfig->EmulationConfig->TerminalType == TERMINAL_VT102 && !PrivateConfig->EmulationConfig->DestructiveBackspace,
  831.                                 TAG_DONE);
  832.  
  833.                                 break;
  834.                         }
  835.                     }
  836.                 }
  837.             }
  838.             while(!Done);
  839.  
  840.             PopWindow();
  841.         }
  842.  
  843.         LT_DeleteHandle(Handle);
  844.     }
  845.  
  846.     if(UseIt)
  847.         SwapConfig(LocalConfig,PrivateConfig);
  848.     else
  849.         SaveConfig(LocalConfig,PrivateConfig);
  850.  
  851.     if(LocalConfig == Config && UseIt)
  852.         ScreenSizeStuff();
  853.  
  854.     return(UseIt);
  855. }
  856.